﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using FTools.Dominio;
using FTools.Persistencia;
using FTools.Interface;
using System.Data.SqlClient;

namespace FTools.Comunicacion
{
    class ComPersona : InterfacePersona
    {
        Conexion objConexion = new Conexion();
        SqlConnection conexion;
        SqlTransaction transaccion = null;
        PerPersona objPerPersona = new PerPersona();

        public Persona obtenerPersona(long xIdPersona)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Persona objPersona = (Persona)objPerPersona.obtenerPersona(conexion, transaccion, xIdPersona);
                transaccion.Commit();
                return objPersona;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public Boolean existePersona(long xIdPersona)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerPersona.existePersona(conexion, transaccion, xIdPersona);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public ArrayList obtenerColeccionPersona()
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colPersona = objPerPersona.obtenerColeccionPersona(conexion, transaccion);
                transaccion.Commit();
                return colPersona;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public ArrayList obtenerBusquedaPersona(String xNombre)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colPersona = objPerPersona.obtenerBusquedaPersona(conexion, transaccion, xNombre);
                transaccion.Commit();
                return colPersona;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        /*
                public int altaPersona(Persona xObjPersona)
                {
                    SqlTransaction sqlTransaction = null;
                    try
                    {
                        conexion = objConexion.abrirConexion();
                        sqlTransaction = conexion.BeginTransaction();
                              
                        int res = objPerPersona.altaPersona(conexion, sqlTransaction, xObjPersona);
                        sqlTransaction.Commit();
                        return res;
                    }
                    catch (Exception ex)
                    {
                        sqlTransaction.Rollback();
                        throw new Exception("#Comunicacion# " + ex.Message);
                    }
                    finally
                    {
                        objConexion.cerrarConexion();
                    }
                }
        
                public int bajaPersona(Persona xObjPersona)
                {
                    SqlTransaction sqlTransaction = null;
                    try
                    {
                        conexion = objConexion.abrirConexion();
                        sqlTransaction = conexion.BeginTransaction();
                        int res = objPerPersona.bajaPersona(conexion, sqlTransaction, xObjPersona);
                        sqlTransaction.Commit();
                        return res;
                    }
                    catch (Exception ex)
                    {
                        sqlTransaction.Rollback();
                        throw new Exception("#Comunicacion# " + ex.Message);
                    }
                    finally
                    {
                        objConexion.cerrarConexion();
                    }
                }

                public int modificaPersona(Persona xObjPersona)
                {
                    SqlTransaction sqlTransaction = null;
                    try
                    {
                        conexion = objConexion.abrirConexion();
                        sqlTransaction = conexion.BeginTransaction();
                        int res = objPerPersona.modificaPersona(conexion, sqlTransaction, xObjPersona);
                        sqlTransaction.Commit();
                        return res;
                    }
                    catch (Exception ex)
                    {
                        sqlTransaction.Rollback();   
                        throw new Exception("#Comunicacion# " + ex.Message);
                    }
                    finally
                    {
                        objConexion.cerrarConexion();
                    }
                }
        */
    }
}
